Computer programs describe actions to be performed by a computer or processor-based device. When a computer program is loaded and executed on computer hardware, the computer will behave in a predetermined manner by following the instructions of the computer program. Accordingly, the computer becomes a specialized machine that performs the tasks prescribed by the instructions. A programmer using a programming language creates the instructions comprising a computer program. Initial programming languages were low-level machine code languages easily understood by computers. While these still exist, over time higher-level programming languages evolved that are more readily comprehensible to humans thereby enabling faster and easier specification of complex programs.
There are a number of disparate types of computer programming languages are in use today. In general, programs can be defined as imperative, declarative or functional. Imperative or procedural languages require a programmer to specify an algorithm to be executed. Declarative languages specify a goal and leave the underlying implementation to support software. Functional program languages are altogether different from both imperative and declarative languages as they are based a lambda calculus and focused on evaluation of mathematical functions.
Still further yet, there can be various categories or classifications within language types. For example, C is often described as a procedural programming language, because it is based upon the concept of modularity and scope of program code. C# and Java are object-oriented programming languages tuned to the creation and manipulation of program code as object classes. Furthermore, JavaScript is a scripting language based on prototype programming model, which is a class-less style of object-oriented programming. As a consequence of this specialization, programming languages have particular strengths and weaknesses.
Languages are selected for use as a function of their strengths and weaknesses as well as a particular problem space and/or environment. However, this is a difficult task, as it is unlikely that a single language will be the best for both a problem and environment. In most instances, a cost benefit analysis is undertaken to identify the best available language. Alternatively, if the problem space and/or environment are sufficiently unique as well as popular, a new programming language may be created to address this context.